package com.framework.service;

import com.baomidou.mybatisplus.service.IService;
import com.framework.entity.ter.TerTerminalInfo;
import com.framework.page.PageUtils;
import com.framework.view.PurchaserView;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 功能描述: 终端接口
 *
 * @author ck
 * @date 2018/8/28 19:46
 */
public interface TerminalInfoService extends IService<TerTerminalInfo> {

    /**
     * 查询激活数量
     *
     * @param agentId 地阿里上ids
     * @param type    时间范围类型 1：昨天 2：本月
     * @param isOwn 是否自己 1否 2是
     * @return
     */
    int queryActivationCount(Long agentId, Integer type, Integer isOwn);

    /**
     * 根据sn查询终端信息
     *
     * @param sn
     * @return
     */
    TerTerminalInfo queryTerminalBySn(String sn);

    /**
     * 查询商户归属信息
     *
     * @param token 当前登录人token
     * @param sn    终端sn
     * @return
     */
    Map<String, Object> queryOwnMap(String token, String sn);

    /***
     * 机具列表
     * @param token
     * @param pageNo
     * @param startSn
     * @param endSn
     * @param model
     * @param isActivation
     * @return
     */
    Map<String, Object> queryTerminalList(String token, Integer pageNo, String startSn, String endSn, String model, Integer isActivation);

    /**
     * 终端类型数量汇总
     * @param token
     * @param isActivation
     * @return
     */
    Map<String, Object> queryTerminalTypeCountMap(String token, Integer isActivation);

    /**
     * 查询单个终端数据
     * @param terminalType
     * @param token
     * @param isActivation
     * @return
     */
    List<TerTerminalInfo> queryTerminalByTypeList(Integer terminalType, String token, Integer isActivation);

    /**
     * 终端分配
     *
     * @param token
     * @param accept       接收人
     * @param startSn      开始终端号
     * @param endSn        结束终端号
     * @param isActivation 是否激活 1：未激活 2：已激活 3：禁用
     * @param model        终端类型
     */
    void disTerminal(String token, Long accept, String startSn, String endSn, String model, Integer isActivation);

    /**
     * 修改终端
     *
     * @param terminal
     */
    void updateTerminal(TerTerminalInfo terminal);

    /**
     *  查询活动机器
     * @param terminalType
     * @param deptId
     * @param activAmount
     * @return
     */
    List<PurchaserView> queryActivList(Integer terminalType, Long deptId, BigDecimal activAmount);

    /**
     * 根据商户号查询终端信息
     * @param merchantCode 商户号
     * @return
     */
    TerTerminalInfo queryTerminalByMCode(String merchantCode);


    /**
     * 根据终端号查询终端列表
     *
     * @param params
     * @return
     */
    List<TerTerminalInfo> queryTerListByNo(Map<String, Object> params);

    /**
     * 处理终端信息
     *
     * @param terTerminalInfos
     * @param agentId
     * @param reapAmount
     * @param startSn
     * @param endSn
     * @param orderId
     * @param deptId
     */
    void handleTer(List<TerTerminalInfo> terTerminalInfos, Long agentId, BigDecimal reapAmount, Long isOnline, String startSn, String endSn, Long orderId, Long deptId, Date activDate);

    /**
     * 乐刷修改商户号
     *
     * @param fileName
     * @param file
     * @return
     */
    Integer updateTerminalInfoForLeShua(String fileName, MultipartFile file);

    /**
     * 后台查询机具列表
     *
     * @param params
     * @return
     */
    PageUtils queryTerminalListByAdmin(Map<String, Object> params);

    /**
     * 根据id查询终端
     *
     * @param terminalId
     * @return
     */
    TerTerminalInfo queryTerminalById(Long terminalId);

    /**
     * 导出excel
     *
     * @param response
     */
    void downExcel(HttpServletResponse response);

    /**
     * 导入终端
     *
     * @param fileName
     * @param file
     * @param deptId
     * @return
     */
    Integer importTerminal(String fileName, MultipartFile file, Long deptId);


    /**
     * 回拨机具
     *
     * @param q
     */
    void rebackTerminal(Map<String, Object> q);

    /**
     * 分配机具
     *
     * @param q
     */
    void distribuTer(Map<String, Object> q);

    /**
     * 报备线上
     *
     * @param fileName
     * @param file
     * @param deptId
     * @return
     */
    Integer reportOnline(String fileName, MultipartFile file, Long deptId);

    /**
     * 读取excel回拨
     *
     * @param fileName
     * @param file
     * @param deptId
     * @return
     */
    Integer excelReback(String fileName, MultipartFile file, Long deptId);


    /**
     * 修改机器为非报备
     * @param sn
     */
    void unReportTerminal(String sn);

    /**
     * 绑定星pos sn和终端号
     * @param merc_id
     * @param merc_nm
     * @param corg_merc_id
     * @param bind_dt
     * @param sn_no
     * @param org_no
     * @param trm_no
     * @return
     */
    Map<String, Object> bindSnAndTerminalCode(String merc_id,
                                              String merc_nm,
                                              String corg_merc_id,
                                              String bind_dt,
                                              String sn_no,
                                              String org_no,
                                              String trm_no) ;

    /**
     * 修改商户号
     * @param fileName
     * @param file
     * @return
     */
    Integer updateMer(String fileName, MultipartFile file);

    /***
     * 上传激活考拉
     * @param fileName
     * @param file
     * @return
     */
    Map<String, Object> uploadToActiv(String fileName, MultipartFile file);

    /**
     * 根据token和条件查询机具列表
     * @param token
     * @param startSn
     * @param endSn
     * @param terminalType
     * @param isActivation
     * @param type
     * @return
     */
    Map<String, Object> queryTerminalListByToken(String token, String startSn, String endSn, Integer terminalType, Integer isActivation, Integer type);

    /**
     * 查询机具所属
     * @param token
     * @param snList
     * @return
     */
    List<Map<String, Object>> queryTerminalOwner(String token, String[] snList);

    /**
     * 流水信息
     * @param token
     * @param sn
     * @return
     */
    Map<String, Object> queryFlowInfoBySn(String token, String sn);

    /**
     * 查询上个月激活机器数量
     * @param agentId
     * @param date
     * @return
     */
    Integer queryLastMonthActivCount(Long agentId, String date);

    /**
     * 激活机器
     * @param sn
     */
    void activTerminal(String sn);

    /**
     * 查询通联数量
     * @param agentId
     * @return
     */
    int queryTLCount(Long agentId);


    /**
     * 激活通联机器
     * @param fileName
     * @param file
     * @return
     */
    Map<String, Object> uploadToActivTL(String fileName, MultipartFile file);

    /**
     * 通联机器的更新商户号，商户号已存在则不修改
     * @param fileName
     * @param file
     * @return
     */
    Integer updateMerForTL(String fileName, MultipartFile file);

    /**
     * 激活鑫亿机器
     * @param fileName
     * @param file
     * @return
     */
    Integer uploadToActivXY(String fileName, MultipartFile file);

    /**
     * vip续费
     * @param fileName
     * @param file
     * @return
     */
    Integer uploadToViPXY(String fileName, MultipartFile file);
}

